package com.ibeeking.found.cms.cp.rest.controller.v1;

import com.ibeeking.found.cms.cp.rest.service.IPageBaseService;
import com.ibeeking.found.cms.cp.rest.service.IPageModuleService;
import com.ibeeking.found.cms.service.common.constants.enums.PageCategoryEnum;
import com.ibeeking.found.cms.service.common.query.PageModuleChildDataPageListQuery;
import com.ibeeking.found.cms.service.common.query.PageModuleChildDataQuery;
import com.ibeeking.found.cms.service.common.query.PageModuleDataQuery;
import com.ibeeking.found.cms.service.common.vo.PageModuleAllView;
import com.ibeeking.found.cms.service.common.vo.PageModuleView;
import com.ibeeking.found.common.db.annotation.Read;
import com.ibeeking.nematos.constants.enums.OperateLogTypeEnum;
import com.ibeeking.nematos.log.annotation.Log;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @ClassName PageBaseController控制器
 * @Description
 * @Author ibeeking
 * @Date 2021-05-08 16:05
 **/
@RestController
@RequestMapping("/cp/open/page/v1")
public class OpenPageController {

    @Resource
    private IPageBaseService pageBaseServiceImpl;

    @Resource
    private IPageModuleService pageModuleServiceImpl;

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看商城首页")
    @PostMapping(value = "/pageModule/viewPage/mallHome")
    public PageModuleAllView viewPageMallHome() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.MALL_HOME);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看活动列表页面")
    @PostMapping(value = "/pageModule/viewPage/activityListPage")
    public PageModuleAllView viewPageActivityListPage() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.ACTIVITY_LIST);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看页面(根据页面类型)")
    @PostMapping(value = "/pageModule/viewPageByCategory/{category}")
    public PageModuleAllView viewPageByCategory(@PathVariable("category") Integer category) {
        PageCategoryEnum pageCategoryEnum = PageCategoryEnum.getEnum(category);
        return pageModuleServiceImpl.viewByPageCategory(pageCategoryEnum);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看页面(根据页面类型)")
    @PostMapping(value = "/pageModule/queryPageByCategory/{category}")
    public PageModuleAllView queryPageByCategory(@PathVariable("category") Integer category) {
        PageCategoryEnum pageCategoryEnum = PageCategoryEnum.getEnum(category);
        return pageModuleServiceImpl.viewByPageCategory(pageCategoryEnum);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看底部导航标签")
    @PostMapping(value = "/pageModule/queryBottomNavgation")
    public PageModuleAllView queryBottomNavgation() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.BOTTOM_NAVIGATION);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看个人中心")
    @PostMapping(value = "/pageModule/queryPersonCenter")
    public PageModuleAllView queryPersonCenter() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.MALL_PERSONAL_CENTER);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看商品分类列表页")
    @PostMapping(value = "/pageModule/queryGoodsClassList")
    public PageModuleAllView queryGoodsClassList() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.MALL_CLASSIFICATION);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看商品列表页")
    @PostMapping(value = "/pageModule/queryGoodsList")
    public PageModuleAllView queryGoodsList() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.MALL_GOODS_LIST);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看工作台页")
    @PostMapping(value = "/pageModule/queryWorkbenchList")
    public PageModuleAllView queryWorkbenchList() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.MALL_WORKBENCH);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看协同页")
    @PostMapping(value = "/pageModule/queryCollaborationList")
    public PageModuleAllView queryCollaborationList() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.MALL_COLLABORATION);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看消息页")
    @PostMapping(value = "/pageModule/queryMessageList")
    public PageModuleAllView queryMessageList() {
        return pageModuleServiceImpl.viewByPageCategory(PageCategoryEnum.MALL_MESSAGE);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看页面(根据页面id)")
    @PostMapping(value = "/pageModule/viewPageById/{id}")
    public PageModuleAllView viewPageById(@PathVariable("id") Long id) {
        return pageModuleServiceImpl.viewByPageId(id);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看页面组件内容(根据组件id)")
    @PostMapping(value = "/pageModule/pageModuleData/{id}")
    public PageModuleView pageModuleData(@PathVariable("id") Long id) {
        return pageModuleServiceImpl.pageModuleData(id);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看页面组件内容(根据组件id 及其他条件)")
    @PostMapping(value = "/pageModule/pageModuleData")
    public PageModuleView pageModuleData(@RequestBody @Validated PageModuleDataQuery query) {
        return pageModuleServiceImpl.pageModuleData(query);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看页面组件子内容(根据组件id,子元素id)")
    @PostMapping(value = "/pageModule/pageModuleChildData")
    public List pageModuleChildData(@RequestBody @Validated PageModuleChildDataQuery query) {
        return pageModuleServiceImpl.pageModuleChildData(query);
    }

    @Read
    @Log(logType = OperateLogTypeEnum.QUERY, describe = "查看页面组件子内容分页数据")
    @PostMapping(value = "/pageModule/pageModuleChildDataPageList")
    public Page pageModuleChildDataPageList(@RequestBody @Validated PageModuleChildDataPageListQuery query) {
        return pageModuleServiceImpl.pageModuleChildDataPageList(query);
    }
}
